# 读取图像（OpenCV默认以BGR格式读取）
import cv2
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt


def clahe_equalization(image_path, clip_limit=2.0, tile_grid_size=(8, 8)):
    """
    使用OpenCV的CLAHE算法对图像进行增强
    参数:
    - image_path: 输入图像路径
    - clip_limit: 对比度限制阈值（默认2.0，建议范围1.0-10.0）
    - tile_grid_size: 分块处理的网格大小（默认8×8，建议范围(4,4)到(16,16)）
    """
    # 读取图像（OpenCV默认以BGR格式读取）
    img_bgr = cv2.imread(image_path)
    if img_bgr is None:
        raise ValueError(f"无法读取图像: {image_path}")
    # 转换到YCrCb颜色空间（Y通道表示亮度，更适合对比度增强）
    img_ycrcb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2YCrCb)
    # 分离通道（Y:亮度, Cr:红色分量, Cb:蓝色分量）
    y, cr, cb = cv2.split(img_ycrcb)
    # 创建CLAHE对象并应用到亮度通道
    clahe = cv2.createCLAHE(clipLimit=clip_limit, tileGridSize=tile_grid_size)
    y_clahe = clahe.apply(y)
    # 合并处理后的通道
    img_ycrcb_clahe = cv2.merge([y_clahe, cr, cb])
    # 转回BGR格式
    img_bgr_clahe = cv2.cvtColor(img_ycrcb_clahe, cv2.COLOR_YCrCb2BGR)
    # 转换为RGB格式（用于matplotlib显示）
    img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
    img_rgb_clahe = cv2.cvtColor(img_bgr_clahe, cv2.COLOR_BGR2RGB)
    # 显示原始图像和增强后的图像
    plt.figure(figsize=(12, 6))
    plt.subplot(1, 2, 1)
    plt.imshow(img_rgb)
    plt.title('原始图像')
    plt.axis('off')
    plt.subplot(1, 2, 2)
    plt.imshow(img_rgb_clahe)
    plt.title(f'CLAHE增强 (clipLimit={clip_limit}, grid={tile_grid_size})')
    plt.axis('off')
    plt.tight_layout()
    plt.show()
    return img_rgb_clahe
# 示例调用
# clahe_equalization("example.jpg", clip_limit=2.0, tile_grid_size=(8, 8))
# 示例调用
# clahe_equalization("example.jpg", clip_limit=2.0, tile_grid_size=(8, 8))
# 使用示例
output_image = clahe_equalization("D:\jvnhenghua\\test.jpg")
